¶

Análisis de la DATA y gráficas correspondientes


In [1]:
import pandas as pd
import plotly.express as px
import numpy as np
datos=pd.read_excel("Aspirantes_Inscritos_Facultad_Programa_Genero_Estrato_de_2015-1_a_2021-1-unicor.xlsx", sheet_name="Data formateada")

print("----------------------------------------------------------------")
print("DATOS ORIGINALES:")
print("----------------------------------------------------------------")
print(datos.head())
----------------------------------------------------------------
DATOS ORIGINALES:
----------------------------------------------------------------
  PERIODO                                          FACULTAD  \
0  2015-1                  Medicina Veterinaria y Zootecnia   
1  2015-1  Ciencias Economicas, Jurídicas y Administrativas   
2  2015-1                              Ciencias de la Salud   
3  2015-1                              Ciencias de la Salud   
4  2015-1                                  Ciencias Básicas   

                                          PROGRAMA  TOTAL INSCRITOS  \
0                                      Acuicultura              216   
1  Adminis. en Finanzas y Negocios Internacionales             1380   
2                          Administración en Salud             1642   
3                                    Bacteriología              770   
4                                         Biología              540   

   SEXO FEME  SEXO MASC  ESTRATO 1  ESTRATO 2  ESTRATO 3  ESTRATO 4  \
0         90        126        185         24        4.0          1   
1        809        571       1189        172       16.0          3   
2       1052        590       1484        149        8.0          1   
3        574        196        686         76        7.0          1   
4        339        201        483         52        3.0          2   

   ESTRATO 5  ESTRATO 6  
0          2          0  
1          0          0  
2          0          0  
3          0          0  
4          0          0  

Se filtra la DATA y se hace la Limpieza de datos

In [4]:
#Filtrar solo por la facultad de ingenierías
facultad = ["Ingenierías"]
df_ig= datos[datos["FACULTAD"].isin(facultad)]
print("-------------------------------------------------")
print("DATA FILTRADA POR PROGRAMAS DE INGENIERÍAS")
print("-------------------------------------------------")
print(df_ig)
#Se limpian los datos nulos
print("-------------------------------------------------")
print("Información de número de datos Null por columna")
print("--------------------------------------------------")
#Se comprueba la existencia de datos Null en el dataframe conociendo la cantidad de datos NaN por columnas
print(df_ig.isnull().sum())
print("--------------------------------------------------")
print("Información de número de datos NaN por columna")
print("--------------------------------------------------")
#Se comprueba la existencia de datos NaN en el dataframe conociendo la cantidad de datos NaN por columnas
print(df_ig.isna().sum())
-------------------------------------------------
DATA FILTRADA POR PROGRAMAS DE INGENIERÍAS
-------------------------------------------------
    PERIODO     FACULTAD                 PROGRAMA  TOTAL INSCRITOS  SEXO FEME  \
9    2015-1  Ingenierías     Ingeniería Ambiental             1087        575   
10   2015-1  Ingenierías  Ingeniería de Alimentos              226        121   
11   2015-1  Ingenierías   Ingeniería de Sistemas              660        189   
12   2015-1  Ingenierías    Ingeniería Industrial              865        359   
13   2015-1  Ingenierías      Ingeniería Mecánica              408         37   
..      ...          ...                      ...              ...        ...   
381  2021-1  Ingenierías     Ingeniería Ambiental              469        250   
382  2021-1  Ingenierías  Ingeniería de Alimentos              218        108   
383  2021-1  Ingenierías   Ingeniería de Sistemas              525         74   
384  2021-1  Ingenierías    Ingeniería Industrial              673        262   
385  2021-1  Ingenierías      Ingeniería Mecánica              306         17   

     SEXO MASC  ESTRATO 1  ESTRATO 2  ESTRATO 3  ESTRATO 4  ESTRATO 5  \
9          511        890        187       10.0          0          0   
10         105        192         28        4.0          2          0   
11         471        588         66        6.0          0          0   
12         505        681        166       15.0          2          1   
13         371        333         66        7.0          1          1   
..         ...        ...        ...        ...        ...        ...   
381        219        395         67        7.0          0          0   
382        110        202         16        0.0          0          0   
383        451        424         90        9.0          1          1   
384        411        524        134       14.0          1          0   
385        289        246         51        8.0          1          0   

     ESTRATO 6  
9            0  
10           0  
11           0  
12           0  
13           0  
..         ...  
381          0  
382          0  
383          0  
384          0  
385          0  

[65 rows x 12 columns]
-------------------------------------------------
Información de número de datos Null por columna
--------------------------------------------------
PERIODO            0
FACULTAD           0
PROGRAMA           0
TOTAL INSCRITOS    0
SEXO FEME          0
SEXO MASC          0
ESTRATO 1          0
ESTRATO 2          0
ESTRATO 3          0
ESTRATO 4          0
ESTRATO 5          0
ESTRATO 6          0
dtype: int64
--------------------------------------------------
Información de número de datos NaN por columna
--------------------------------------------------
PERIODO            0
FACULTAD           0
PROGRAMA           0
TOTAL INSCRITOS    0
SEXO FEME          0
SEXO MASC          0
ESTRATO 1          0
ESTRATO 2          0
ESTRATO 3          0
ESTRATO 4          0
ESTRATO 5          0
ESTRATO 6          0
dtype: int64
In [6]:
#datos duplicados
datos_dup = df_ig.duplicated()
df_filas = df_ig[df_ig.duplicated(keep='first')] #obtendremos las filas duplicadas sin incluir la primera coincidencia
# Obtener los índices de las filas duplicadas
filas_indice = df_filas.index
total_filas_dup = len(df_filas)
print("Se marca en TRUE aquellas filas que tengas valores duplicados")
print(datos_dup)
print("----------------------------------------")
print("Se muestran el indice de filas duplicadas")
print("----------------------------------------")
print(f"Indice de filas duplicadas encontradas: {filas_indice.tolist()}")
print(f"Total filas duplicadas encontradas:{total_filas_dup}")
Se marca en TRUE aquellas filas que tengas valores duplicados
9      False
10     False
11     False
12     False
13     False
       ...  
381    False
382    False
383    False
384    False
385    False
Length: 65, dtype: bool
----------------------------------------
Se muestran el indice de filas duplicadas
----------------------------------------
Indice de filas duplicadas encontradas: []
Total filas duplicadas encontradas:0
In [8]:
#Si se encuentras datos duplicados, estos serán eliminados
df_ig = df_ig.drop_duplicates()
print("DATAFRAME SIN DATOS DUPLICADOS")
print(df_ig)
DATAFRAME SIN DATOS DUPLICADOS
    PERIODO     FACULTAD                 PROGRAMA  TOTAL INSCRITOS  SEXO FEME  \
9    2015-1  Ingenierías     Ingeniería Ambiental             1087        575   
10   2015-1  Ingenierías  Ingeniería de Alimentos              226        121   
11   2015-1  Ingenierías   Ingeniería de Sistemas              660        189   
12   2015-1  Ingenierías    Ingeniería Industrial              865        359   
13   2015-1  Ingenierías      Ingeniería Mecánica              408         37   
..      ...          ...                      ...              ...        ...   
381  2021-1  Ingenierías     Ingeniería Ambiental              469        250   
382  2021-1  Ingenierías  Ingeniería de Alimentos              218        108   
383  2021-1  Ingenierías   Ingeniería de Sistemas              525         74   
384  2021-1  Ingenierías    Ingeniería Industrial              673        262   
385  2021-1  Ingenierías      Ingeniería Mecánica              306         17   

     SEXO MASC  ESTRATO 1  ESTRATO 2  ESTRATO 3  ESTRATO 4  ESTRATO 5  \
9          511        890        187       10.0          0          0   
10         105        192         28        4.0          2          0   
11         471        588         66        6.0          0          0   
12         505        681        166       15.0          2          1   
13         371        333         66        7.0          1          1   
..         ...        ...        ...        ...        ...        ...   
381        219        395         67        7.0          0          0   
382        110        202         16        0.0          0          0   
383        451        424         90        9.0          1          1   
384        411        524        134       14.0          1          0   
385        289        246         51        8.0          1          0   

     ESTRATO 6  
9            0  
10           0  
11           0  
12           0  
13           0  
..         ...  
381          0  
382          0  
383          0  
384          0  
385          0  

[65 rows x 12 columns]

Datos outliers

In [27]:
Q4= df_ig["SEXO FEME"].quantile(0.95)
Q1= df_ig["SEXO FEME"].quantile(0.05)

# Identificar outliers fuera de los límites
outliers = df_ig[(df_ig["SEXO FEME"] < Q1) | (df_ig["SEXO FEME"] > Q4)]

print(outliers)
    PERIODO     FACULTAD               PROGRAMA  TOTAL INSCRITOS  SEXO FEME  \
9    2015-1  Ingenierías   Ingeniería Ambiental             1087        575   
12   2015-1  Ingenierías  Ingeniería Industrial              865        359   
40   2015-2  Ingenierías    Ingeniería Mecánica              118          5   
69   2016-1  Ingenierías    Ingeniería Mecánica              258         10   
98   2016-2  Ingenierías    Ingeniería Mecánica              133          8   
125  2017-1  Ingenierías   Ingeniería Ambiental              668        390   
189  2018-1  Ingenierías   Ingeniería Ambiental              659        327   
353  2020-2  Ingenierías    Ingeniería Mecánica              111          7   

     SEXO MASC  ESTRATO 1  ESTRATO 2  ESTRATO 3  ESTRATO 4  ESTRATO 5  \
9          511        890        187       10.0          0          0   
12         505        681        166       15.0          2          1   
40         113        104         12        2.0          0          0   
69         248        226         29        2.0          0          0   
98         125        116         17        0.0          0          0   
125        278        584         77        5.0          2          0   
189        332        574         79        4.0          1          1   
353        104         94         15        1.0          1          0   

     ESTRATO 6  
9            0  
12           0  
40           0  
69           1  
98           0  
125          0  
189          0  
353          0  

Agrupamos por periodo la cantidad de mujeres inscritas

In [120]:
#Agrupar por Año y sumar cantidad de mujeres
df_group = df_ig.groupby('PERIODO')['SEXO FEME'].sum().reset_index()
print(df_group)
   PERIODO  SEXO FEME
0   2015-1       1281
1   2015-2        332
2   2016-1        602
3   2016-2        347
4   2017-1        755
5   2017-2        400
6   2018-1        757
7   2018-2        366
8   2019-1        624
9   2019-2        263
10  2020-1        711
11  2020-2        238
12  2021-1        711

Gráfica 1: Tendencia de cantidad de mujeres inscritas en los programas de ingenierías (2015-I - 2021-I)

In [123]:
#Creamos un gráfico de líneas
fig = px.line(df_group, 
              x='PERIODO',  #Eje X: Año o Periodo
              y='SEXO FEME',  #Eje Y: Área Sembrada
              title='Mujeres inscritas por año en la facultada de ingenierías',  #Título del gráfico
              labels={'PERIODO': 'Años', 'SEXO FEME': 'Mujeres inscritas'},  #Etiquetas de los ejes
              markers=True
             )
 
#Mostrar el gráfico
fig.show()

Gráfica 2 - programa de ingenierías: Tendencia mujeres inscritas vs hombres inscritos

In [126]:
#Agrupar por Año y sumar cantidad de mujeres y hombres
df_group_fm = df_ig.groupby('PERIODO')[['SEXO FEME','SEXO MASC']].sum().reset_index()
print(df_group_fm)
#Creamos un gráfico de líneas
fig = px.line(df_group_fm, 
              x='PERIODO',  #Eje X: Año o Periodo
              y=['SEXO FEME','SEXO MASC'],  #Eje Y: Área Sembrada
              title='Mujeres inscritas vs Hombres inscritos (2015-I - 2021-I)',  #Título del gráfico
              color_discrete_sequence=["rgb(255, 0, 0)","rgb(0, 0, 255)"],
              markers=True  #Etiquetas de los ejes
             )
 
#Mostrar el gráfico
# Actualizar el color y tamaño del marcador
fig.update_traces(marker=dict(color='darkblue', size=10))
fig.show()
   PERIODO  SEXO FEME  SEXO MASC
0   2015-1       1281       1963
1   2015-2        332        668
2   2016-1        602       1248
3   2016-2        347        636
4   2017-1        755       1231
5   2017-2        400        879
6   2018-1        757       1568
7   2018-2        366        833
8   2019-1        624       1227
9   2019-2        263        653
10  2020-1        711       1480
11  2020-2        238        560
12  2021-1        711       1480

Gráfica 3: Gráfica de pastel - facultades

In [33]:
#Agrupar por Año y sumar cantidad de mujeres y hombres
"""se toman los datos de la tabla original, pese a que en fila ESTRATO 3 se encontró celdas null, este no afecta las variables
tenidas en cuenta para el análisis
"""
df_group_fac = datos.groupby('FACULTAD')['SEXO FEME'].sum().reset_index()
print(df_group_fac)
#Creamos un gráfico de pastel
fig = px.pie(df_group_fac, 
             names='FACULTAD',  #Categorías en el gráfico (eje de categorías)
             values='SEXO FEME',  #Valores que se representan en el gráfico
             title='Mujeres inscritas por facultad (2015-I - 2021-I)',  #Título
             labels={'FACULTAD': 'Facultad', 'SEXO FEME': '# Mujeres inscritas'}  #Etiquetas
            )
 
#Mostrar el gráfico
fig.show()
                                           FACULTAD  SEXO FEME
0                                Ciencias Agrícolas        757
1                                  Ciencias Básicas       3181
2  Ciencias Economicas, Jurídicas y Administrativas       8864
3                              Ciencias de la Salud      15724
4                      Educación y Ciencias Humanas      14296
5                                       Ingenierías       7387
6                  Medicina Veterinaria y Zootecnia       1815

Gráfica 4: Cantidad de personas inscritas en los programas de ingenierías por estrato

In [48]:
#Creamos un gráfico de columnas
#Agrupar por Año y sumar cantidad de mujeres
df_group2 = df_ig.groupby('FACULTAD')[['ESTRATO 1', 'ESTRATO 2', 'ESTRATO 3', 'ESTRATO 4', 'ESTRATO 5', 'ESTRATO 6']].sum().reset_index()
print(df_group2)
      FACULTAD  ESTRATO 1  ESTRATO 2  ESTRATO 3  ESTRATO 4  ESTRATO 5  \
0  Ingenierías      18649       2860      265.0         29         10   

   ESTRATO 6  
0          2  
In [62]:
# Transformar el DataFrame a formato largo con el método melt() para Plotly Express
df_long = df_group2.melt(id_vars='FACULTAD', var_name='Estrato', value_name='Cantidad')

#Creamos un gráfico de pastel
fig = px.pie(df_long, 
                 names='Estrato', 
                 values='Cantidad',
                 title=f'Distribución número de personas incristas por Estratos en la Facultad de ingenierías')
 
#Mostrar el gráfico
fig.show()
In [ ]: